﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Data;

namespace prjCompras
{
    public partial class frmProcPedidoCompra : FormProcessoPadrao.FormProcessoPadrao
    {
        public frmProcPedidoCompra()
        {
            InitializeComponent();

            campos = new List<string>();
        }

        Color c;

        private void frmProcPedidoCompra_Load(object sender, EventArgs e)
        {
            insereTextoProcesso(" Pedido de Compras");

            string sql = "";
            sql += @"select cc.Codigo Código, 
                            r.Data, 
                            case when r.Urgente = 0 then 'Sim' else 'Não' end Situação,
                            r.Observacao Observação 
                       from Requisicao r, 
                            CartaCotacao cc, 
                            RespostaCotacao rc, 
                            Fornecedor f 
                      where r.Codigo = cc.CodigoRequisicao
                        and cc.Codigo = rc.CodigoCotacao
                        and rc.PedidoGerado = 0
                        and f.CNPJ = cc.CNPJFornecedor 
                      group by cc.Codigo,
                               r.Data,
                               r.Urgente,
                               r.Observacao";
            dtgrdvwCotacao.DataSource = Conexao.getInstance.executeQuery(sql);

            for (int i = 0; i < dtgrdvwCotacao.Columns.Count; i++)
            {
                dtgrdvwCotacao.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
            }

            for (int i = 0; i < dtgrdvwFornecedores.Columns.Count; i++)
            {
                dtgrdvwFornecedores.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
            }
        }

        private void dtgrdvwCotacao_SelectionChanged(object sender, EventArgs e)
        {
            string cod_req = dtgrdvwCotacao.CurrentRow.Cells[0].Value.ToString();
            string sql = "";
            sql += @"select m.Codigo Código,
                            m.Nome Material,
                	        rm.Quantidade
                       from Material m,
                            RequisicaoMaterial rm
                      where m.Codigo = rm.CodigoMaterial
                        and rm.CodigoRequisicao = " + cod_req;

            dtgrdvwMateriaisCotacao.DataSource = Conexao.getInstance.executeQuery(sql);

            sql = "";

            sql += @"select rc.CNPJFornecedor CNPJ,
	                        f.Nome Fornecedor,
                            sum(rcm.QtdAtendida * rcm.ValorUnitario) Total,
                            '' Opção
                       from CartaCotacao cc,
                            RespostaCotacao rc,
                            Fornecedor f,
		                    RespostaCotacaoMaterial rcm,
		                    CriterioFornecedor cf
                      where cc.Codigo = rc.CodigoCotacao
                        and rc.PedidoGerado = 0
                        and f.CNPJ = cc.CNPJFornecedor
                        and rcm.CodigoRespostaCotacao = rc.Codigo
                        and cf.CNPJFornecedor = rc.CNPJFornecedor
	                    and cc.Codigo = " + cod_req + @"
                   group by rc.CNPJFornecedor,
		                    f.Nome,
                            cf.CriterioCusto + cf.CriterioEntrega + cf.CriterioQualidade
                   order by cf.CriterioCusto + cf.CriterioEntrega + cf.CriterioQualidade desc";

            dtgrdvwFornecedores.DataSource = Conexao.getInstance.executeQuery(sql);
            dtgrdvwFornecedores.Columns[2].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            if (dtgrdvwFornecedores.RowCount > 0)
            {
                dtgrdvwFornecedores.Rows[0].Cells[3].Value = "Melhor Opção";
                dtgrdvwFornecedores.CurrentCell = dtgrdvwFornecedores.Rows[0].Cells[0];
                dtgrdvwFornecedores_CellClick(null, null);
            }
            
            sql = @"select rccp.CodigoCondicaoPagamento,
                           cp.Nome
                      from RespostaCotacaoCondicaoPagamento rccp,
	                       RespostaCotacao rc,
	                       CartaCotacao cc,
	                       CondicaoPagamento cp
                     where rccp.CodigoRespostaCotacao = rc.Codigo
                       and cc.Codigo = rc.CodigoCotacao
                       and cp.Codigo = rccp.CodigoCondicaoPagamento
                       and cc.Codigo = " + dtgrdvwCotacao.CurrentRow.Cells[0].Value.ToString();

            cmbxCondicaoPagamento.DataSource = Conexao.getInstance.executeQuery(sql);

            cmbxCondicaoPagamento.DisplayMember = "Nome";
            cmbxCondicaoPagamento.ValueMember = "CodigoCondicaoPagamento";
        }

        private void dtgrdvwFornecedores_SelectionChanged(object sender, EventArgs e)
        {
            string sql = "";
            sql += @"select m.Codigo Código,
                            m.Nome Material
                       from FornecedorMaterial fm,
                            Fornecedor f,
                            Material m
                      where fm.CNPJFornecedor = f.CNPJ
                        and fm.CodigoMaterial = m.Codigo
                        and f.CNPJ = '" + dtgrdvwFornecedores.CurrentRow.Cells[0].Value.ToString() + @"'
                        and m.Codigo in (select rcm.CodigoMaterial 
                                           from RespostaCotacao rc, 
                                                RespostaCotacaoMaterial rcm,
                                                CartaCotacao cc
                                          where rc.Codigo = rcm.CodigoRespostaCotacao
                                            and cc.Codigo = rc.CodigoCotacao
                                            and cc.Codigo = " + dtgrdvwCotacao.CurrentRow.Cells[0].Value.ToString() + @")
                      group by m.Codigo,
                               m.Nome";

            dtgrdvwMateriaisFornecedor.DataSource = Conexao.getInstance.executeQuery(sql);
        }

        private void dtgrdvwFornecedores_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dtgrdvwFornecedores.RowCount > 0)
            {
                if (dtgrdvwFornecedores.Rows[e.RowIndex].DefaultCellStyle.ForeColor == Color.DarkRed)
                {
                    dtgrdvwFornecedores.Rows[e.RowIndex].DefaultCellStyle.ForeColor = Color.Black;
                }
                else
                {
                    dtgrdvwFornecedores.Rows[e.RowIndex].DefaultCellStyle.ForeColor = Color.DarkRed;
                }
            }
        }

        public override bool metodo()
        {
            if (dtgrdvwFornecedores.CurrentRow.Cells[3].Value == "" && txtbxJustificativa.Visible)
            {
                MessageBox.Show("Deve-se informar a justificativa para troca de fornecedor!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return false;
            }
            
            string sql = "";

            sql = @"select rc.Codigo
	                  from CartaCotacao cc,
		                   RespostaCotacao rc
	                 where cc.Codigo = rc.CodigoCotacao
	                   and rc.CNPJFornecedor = '" + dtgrdvwFornecedores.CurrentRow.Cells[0].Value.ToString() + @"'
	                   and cc.Codigo = "+ dtgrdvwCotacao.CurrentRow.Cells[0].Value.ToString();

            DataTable dt = Conexao.getInstance.executeQuery(sql);
            DataRow dr = dt.Rows[0];
            string cod_resp_cot = dr[0].ToString();

            sql = @"Insert into PedidoCompra (CodigoRespostaCotacao, CodigoCondicaoPagamento, Data)
                        values (" + cod_resp_cot + ", " + cmbxCondicaoPagamento.SelectedValue + ", '" + DateTime.Now.ToShortDateString() + "')";
            if (Conexao.getInstance.execute(sql, false) == false)
            {
                return false;
            }

            sql = SqlCrud.getInstance.selectMax(ConstTabelas.PEDIDOCOMPRA);
            dt = Conexao.getInstance.executeQuery(sql);
            dr = dt.Rows[0];
            string cod_pedido = dr[0].ToString();

            sql = @"insert into PedidoMaterial (CodigoPedido, CodigoMaterial, Quantidade, ValorUnitario)
	                    select " +  cod_pedido + @", rcm.CodigoMaterial, rcm.QtdAtendida, rcm.ValorUnitario
	                      from CartaCotacao cc,
		                       RespostaCotacao rc,
		                       RespostaCotacaoMaterial rcm
	                     where cc.Codigo = rc.CodigoCotacao
	                       and rc.Codigo = rcm.CodigoRespostaCotacao
	                       and rc.CNPJFornecedor = '" + dtgrdvwFornecedores.CurrentRow.Cells[0].Value.ToString() + @"'
	                       and cc.Codigo = " + dtgrdvwCotacao.CurrentRow.Cells[0].Value.ToString();

            if (Conexao.getInstance.execute(sql, false) == false)
            {
                return false;
            }

            sql = "update RespostaCotacao set PedidoGerado = 1 where Codigo = " + cod_resp_cot;

            if (Conexao.getInstance.execute(sql, false) == false)
            {
                return false;
            }

            Conexao.getInstance.CommitTransacao();


            return base.metodo();
        }

        private void dtgrdvwFornecedores_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dtgrdvwFornecedores.CurrentRow.Cells[3].Value.Equals(string.Empty))
            {
                lblTextoJustificativa.Visible = true;
                txtbxJustificativa.Visible = true;
            }
            else
            {
                lblTextoJustificativa.Visible = false;
                txtbxJustificativa.Visible = false;
            }
        }
    }
}
